package com.utf999.qiangmanger.entity.orm;

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.utf999.qiangmanger.entity.UUIDEntity;

/**
 * 工单类型。工单类型分为系统默认工单和公司自定工单。<br>
 * 默认工单在创建公司时被初始化，且不能做任何修改/作废操作。
 * 包括“消费服务单”、“维修服务单”、“保洁服务单”、“普通服务单”<br>
 * 
 * @index unique(O_OrderTypeOrderCodeUnique OrderCode, company)
 * 
 * @author yinwenjie
 */
//TODO 注意，在一个新公司创建时，这个公司类型将被初始化系统默认设置的订单类型
@Entity
@Table(name="O_OrderType")
public class OrderTypeEntity extends UUIDEntity {
	/**
	 * 
	 */
	private static final long serialVersionUID = 4104538356842502526L;
	
	/**
	 * 工单类型的中文说明
	 */
	@Column(name="orderTypeName" , length = 128 , nullable=false)
	private String orderTypeName;
	
	/**
	 * 工单类型编码，工单类型编码将有助于操作人员快速建立工单<br>
	 * 0001编码的工单肯定是消费单。0001——0010的10中
	 */
	@Column(name="orderCode" , length = 16 , nullable=false)
	private String orderCode = "";
	
	/**
	 * 工单类型的创建说明：
	 * 1、系统工单类型（不能修改/删除）
	 * 2、自定义工单类型
	 * @return
	 */
	@Column(name="createType" , nullable=false)
	private Integer createType;
	
	/**
	 * 订单类型状态：
	 * 1、正常
	 * 2、作废
	 */
	@Column(name="status" , nullable=false)
	private Integer status = 1;
	
	/**
	 * 订单类型的默认积分.默认为10分
	 */
	@Column(name="integral" , nullable=false)
	private Integer integral = 10;
	
	/**
	 * 这类订单的标准处理时长 （单位秒）。默认180秒
	 */
	@Column(name="duration" , nullable=false)
	private Integer duration = 180;
	
	/**
	 * 订单类型服务定义所属的公司
	 */
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="company" , nullable=false)
	private CompanyEntity company;
	
	/**
	 * 记录了属于这订单类型的服务定义
	 */
	@OneToMany(fetch=FetchType.LAZY , mappedBy="orderType")
	private Set<OrderTypeDefineEntity> defines;
	
	/**
	 * 这个订单类型所绑定的用户组信息
	 */
	@ManyToMany(fetch=FetchType.LAZY)
	@JoinTable(name="O_OrderTypeMapping" , joinColumns={@JoinColumn(name="ORDERTYPE_ID")} , inverseJoinColumns={@JoinColumn(name="USERGROUP_ID")})
	private Set<StoreUserGroupEntity> userGroups;
	
	public String getOrderTypeName() {
		return orderTypeName;
	}

	public void setOrderTypeName(String orderTypeName) {
		this.orderTypeName = orderTypeName;
	}

	public Integer getCreateType() {
		return createType;
	}

	public void setCreateType(Integer createType) {
		this.createType = createType;
	}
	
	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}
	
	public Integer getIntegral() {
		return integral;
	}

	public void setIntegral(Integer integral) {
		this.integral = integral;
	}

	public Integer getDuration() {
		return duration;
	}

	public void setDuration(Integer duration) {
		this.duration = duration;
	}

	public CompanyEntity getCompany() {
		return company;
	}

	public void setCompany(CompanyEntity company) {
		this.company = company;
	}

	public Set<OrderTypeDefineEntity> getDefines() {
		return defines;
	}

	public void setDefines(Set<OrderTypeDefineEntity> defines) {
		this.defines = defines;
	}

	public Set<StoreUserGroupEntity> getUserGroups() {
		return userGroups;
	}

	public void setUserGroups(Set<StoreUserGroupEntity> userGroups) {
		this.userGroups = userGroups;
	}
	
	public String getOrderCode() {
		return orderCode;
	}

	public void setOrderCode(String orderCode) {
		this.orderCode = orderCode;
	}

	/* (non-Javadoc)
	 * @see com.utf999.qiangmanger.entity.UUIDEntity#getUniqueKey()
	 */
	@Override
	public String getUniqueKey() {
		return "uid";
	}
}